#include<iostream>
#include<unordered_map>
using namespace std;
typedef long long LL;
unordered_map<LL, int>mp;
const int N = 1e7 + 10;
LL n;
int main()
{
	cin >> n;
	LL ans = 1;
	for (LL i = 2; i * i <= n; i++) {
		if (n % i == 0) {
			int s = 0;
			while (n % i == 0) {
				s++;
				n /= i;
			}
			if (s % 2) ans *= i;
		}
	}
	if (n > 1)ans *= n;
	cout << ans << endl;
	return 0;
}
//int main()
//{
//	cin >> n;
//	for (int i = 1; i <= N - 1; i++) {
//		LL k = (LL)i * i;
//		mp[k] = 1;
//	}
//	for (int i = 1; i <= 1000; i++) {
//		if (mp[n * i]) {
//			cout << i << endl;
//			break;
//		}
//	}
//	return 0;
//}
